from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import chat_agent_executor

"""
编写方法
"""


def add(a: int, b: int) -> int:
    """Add two integers.
    Args:
        a: First integer
        b: Second integer
    """
    return a + b;


def multiply(a: int, b: int) -> int:
    """Multiply two integers.
    Args:
       a: First integer
       b: Second integer
    """
    return a * b;


llm = ChatOpenAI(
    api_key="sk-VowKQBUMIkSND8WScNJtDLqf3FyqWHQ43LMVUXH1m6GZaopA",
    base_url="https://ai.nengyongai.cn/v1"
)

"""
模型绑定方法
"""


def test1():
    # 模型绑定方法使用的是数组，即便只有一个方法也是使用数组的格式。
    # 能够一次绑定多个方法，就意味着模型有能够自行选择使用哪个方法的能力。
    tools = [add, multiply]

    # 使用invoke()函数对模型进行提问
    llm_with_tools = llm.bind_tools(tools)
    resp = llm_with_tools.invoke("3 * 12等于多少?")
    print(resp)


def test2():
    #
    tools = [add, multiply]
    #
    agent_executor = chat_agent_executor.create_tool_calling_executor(llm, tools)
    response = agent_executor.invoke({'messages': [HumanMessage(content="3 * 12等于多少?")]})

    print(response)
